#pragma once
#include <string.h>
#include"data_structure.h"
#include"personal_info_m.h"

//清理缓存区
void clear_input_buffer3();


//场地类型包括
//篮球场，羽毛球场，足球场，台球场，乒乓球场，排球场


////用户预约信息
//typedef struct User_res {
//	/*long long id; */                //uid
//	char name[50];                //真实姓名
//	char id_name[50];             //身份证号码
//	char phone[50];               //电话号码
//	VenueType venue_Type;         //场地类型
//	char year[5];                 // 年份(4位)
//	char month[3];                // 月份（2位)
//	char day[3];                  // 日期（2位)
//	char start_time[3];				// 时间区间（如"08-10"）
//	char end_time[3];
//	int flag;
//}User_res;
//
//
////用户预约节点
//typedef struct Res_node {
//	User_res user_res;                        //节点
//	struct res_node* next;           //指向下一个节点的指针
//}Res_node;
//
//
//
////用户预约链表
//typedef struct Res_list {
//	Res_node* head;
//	int size;
//}Res_list;

//解析字符串到结构体
//判断时间输入格式
int parse_time_string(char* input, Res_node* res_node);

//创建链表节点
Res_node* create_res_node();


//链表初始化
void init_res_list(Res_list* res_list);


//加入链表
void append_res_list(Res_list* res_list, Res_node* res_node);


//清空当前链表
void free_res_list(Res_list* res_list);


//打印当前链表
void printf_res(Res_list res_list);

//打印当前用户链表
void printf_cur_res(Res_list res_list, User_node* cur_user_node);


//保存预约信息至文件中
void save_res_data(Res_list* res_list);


//读取预约信息至链表中
void read_res_data(Res_list* user_list);


//预约函数
void res_system(User_node* cur_user_node, System* sys);

//修改预约信息函数
void change_cur_res(System* sys, User_node* cur_user_node);

//删除预约信息函数
void delete_cur_res(Res_list* res_list, User_node* cur_user_node);

//根据编号获取预约信息
User_res* find_res(Res_list*, int id);

// 读取预约消息
void read_res_set_facility(User_res user_res, System* sys);

// 打印仅预约场地
void print_only_type(Res_list* res_list);


/** 查找功能
	查找预订信息 姓名 模糊
	查找预订信息 电话
	查找预订信息 日期
	查找预订信息 姓名+日期
	查找预订信息 电话+日期
**/
// 查找预订信息 姓名 模糊
void search_reservation_by_name(System sys);
// 查找预订信息 电话
void search_reservation_by_phone(System sys);
// 查找预订信息 日期
void search_reservation_by_date(System sys);
// 查找预订信息 姓名+日期
void search_reservation_by_name_date(System sys);
// 查找预订信息 电话+日期
void search_reservation_by_phone_date(System sys);

//查找当前账号下的预订信息
//对场地信息查找
void search_res_facility(System* sys, User_node* cur_user_node);
//查找场地使用情况
void search_res_flag(System* sys, User_node* cur_user_node);
//查找预约时间情况
void search_res_time(System* sys, User_node* cur_user_node);

// 排序功能
// 实现比较日期
int compare_date(char y1[5], char m1[3], char d1[3], char y2[5], char m2[3], char d2[3]);
// 查看预订信息 Order by 日期
void sort_res_order_by_date(Res_list* res_list);
// 查看预订信息 Order by 编号
void sort_res_order_by_id(Res_list* res_list);
// 查看预订信息 Order by 场地编号
void sort_res_order_by_facility_id(Res_list* list);
// 查看预订信息 Order by 用户名称
void sort_res_order_by_name(Res_list* list);

//排序函数
void sort_cur_res(System* sys, User_node* cur_user_node);

// 统计功能
// 预约信息总统计
void res_all_statistic(System sys);
// 未到场预约统计
void res_default_statistic(System sys);
// 统计预约信息   by user
void statistic_res_by_user(System sys);
// 统计预约信息   by facility_type
void statistic_res_by_facility_type(System sys);
// 统计预约信息  by user and facility_type
void statistic_res_by_user_and_facility_type(System sys);
// 统计预约信息  by data_range
void statistic_res_by_date_range(System sys);
//统计当前用户的预订消息的各字段
void statistic_cur_res(System sys, User_node* cur_user_node);

//按日期统计
void count_cur_res_data(System sys, User_node* cur_user_node);
//场地使用次数
void count_cur_res_use(System sys, User_node* cur_user_node);
//场地使用类型统计
void count_cur_res_type(System sys, User_node* cur_user_node);
//某短时间内的未使用场地数
void count_cur_res_properties(System sys, User_node* cur_user_node);